﻿/* Copyright (c) 2010 EPiServer AB
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
 * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
using System.Text;
using System.Web;
using EPiServer.Core;

namespace EPiServer.Municipality.Web {
    /// <summary>
    /// 
    /// </summary>
    /// <remarks></remarks>
    /// <example></example>
    public class PathUtil {
        /* *******************************************************************
         *  Methods 
         * *******************************************************************/
        #region public static string GetCurrentPath(string startPageTitle, string SeparatorText, bool textOnly)
        /// <summary>
        /// 
        /// </summary>
        /// <param name="startPageTitle"></param>
        /// <param name="SeparatorText"></param>
        /// <param name="textOnly"></param>
        /// <returns></returns>
        public static string GetCurrentPath(string startPageTitle, string SeparatorText, bool textOnly) {

            if (SiteMap.CurrentNode == null)
                return null;

            var sb = new StringBuilder();

            PrependText(SiteMap.CurrentNode, startPageTitle, sb);

            var parent = SiteMap.CurrentNode.ParentNode as PageSiteMapNode;
            while (parent != null && parent != SiteMap.RootNode && parent.CurrentPage.PageLink != PageReference.RootPage) {

                if (parent.CurrentPage["NotVisibleInPath"] == null) {
                    sb.Insert(0, SeparatorText);

                    if (textOnly)
                        PrependText(parent, startPageTitle, sb);
                    else
                        PrependAnchor(parent, startPageTitle, sb);
                }

                parent = parent.ParentNode as PageSiteMapNode;
            }
            return sb.ToString();
        }
        #endregion
        #region private static void PrependText(SiteMapNode node, string startPageTitle, out StringBuilder sb)
        /// <summary>
        /// 
        /// </summary>
        /// <param name="node"></param>
        /// <param name="startPageTitle"></param>
        /// <param name="sb"></param>
        private static void PrependText(SiteMapNode node, string startPageTitle, StringBuilder sb) {
            if (node.Equals(SiteMap.RootNode))
                sb.Insert(0, HttpUtility.HtmlEncode(startPageTitle));
            else
                sb.Insert(0, HttpUtility.HtmlEncode(node.Title));
        }
        #endregion
        #region private static void PrependAnchor(SiteMapNode node, string startPageTitle, StringBuilder sb)
        /// <summary>
        /// 
        /// </summary>
        /// <param name="node"></param>
        /// <param name="startPageTitle"></param>
        /// <param name="sb"></param>
        private static void PrependAnchor(SiteMapNode node, string startPageTitle, StringBuilder sb) {
            if (node.Equals(SiteMap.RootNode))
                sb.Insert(0, "<a href=\"" + HttpContext.Current.Server.HtmlEncode(node.Url) + "\">" + HttpContext.Current.Server.HtmlEncode(startPageTitle) + "</a>");
            else
                sb.Insert(0, "<a href=\"" + HttpContext.Current.Server.HtmlEncode(node.Url) + "\">" + HttpContext.Current.Server.HtmlEncode(node.Title) + "</a>");
        }
        #endregion
    }
}